package cliente.vista;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.sql.SQLException;

import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.GroupLayout.Alignment;

import cliente.controle.ContaControlador;
import cliente.controle.Sistema;
import cliente.modelo.TipoConta;

public class PegaValorDaContaView {

	private JFrame tela;
	private JPanel painel;
	private JLabel valorLabel;
	private JTextField valor;
	private JButton cancela;
	private JButton cria;
	private ActionListener ouvinte;
	private TipoConta tipoDeConta;

	public void iniciaPegaValorDaContaView(TipoConta tipoDeConta) {
		this.tipoDeConta = tipoDeConta;
		ouvinte = new acao();
		tela = new JFrame();
		tela.setResizable(false);
		tela.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		tela.setBounds(500, 300, 300, 100);
		tela.setVisible(true);
		tela
				.setTitle("Cria Conta "
						+ (tipoDeConta == TipoConta.CORRENTE ? "Corrente"
								: "Poupança"));

		painel = new JPanel();
		cria = new JButton("Criar");
		cria.addActionListener(ouvinte);
		cancela = new JButton("Cancelar");
		cancela.addActionListener(ouvinte);
		valorLabel = new JLabel("Valor na Nova Conta:");
		valor = new JTextField();

		GroupLayout layout = new GroupLayout(painel);
		painel.setLayout(layout);

		layout.setAutoCreateGaps(true);
		layout.setAutoCreateContainerGaps(true);
		organizaFields(layout);

		tela.add(painel);
	}

	private void criaGruposVerticais(GroupLayout layout) {
		GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup();
		vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(valorLabel).addComponent(valor));
		vGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(cria).addComponent(cancela));
		layout.setVerticalGroup(vGroup);
	}

	private void criaGruposHorizontais(GroupLayout layout) {
		GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();
		hGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(valorLabel).addComponent(cria));
		hGroup.addGroup(layout.createParallelGroup(Alignment.CENTER)
				.addComponent(valor).addComponent(cancela));
		layout.setHorizontalGroup(hGroup);
	}

	private void organizaFields(GroupLayout layout) {
		criaGruposHorizontais(layout);
		criaGruposVerticais(layout);
	}

	class acao implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent arg0) {
			if (arg0.getSource() == cria) {
				if (ContaControlador.validaDadosConta(valor.getText())) {
					Sistema s = Sistema.getUnicaInstancia();
					String[] valores = valor.getText().split(",");
					int reais = Integer.parseInt(valores[0]);
					int centavos;

					try {
						centavos = Integer.parseInt(valores[1]);
					} catch (ArrayIndexOutOfBoundsException e) {
						centavos = 0;
					} catch (NumberFormatException e) {
						centavos = 0;
					}
					try {
						ContaControlador.cria(s.getAtualId(), tipoDeConta,
								reais, centavos);
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					JOptionPane.showMessageDialog(tela,
							"Conta Criada com Sucesso");
					tela.dispose();

				} else
					JOptionPane.showMessageDialog(tela, "Dados Incorretos");
			}
			try {
				new ClienteView().iniciaTela();
			} catch (NumberFormatException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			if (arg0.getSource() == cancela) {
				tela.dispose();
				try {
					new ClienteView().iniciaTela();
				} catch (NumberFormatException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

	}

}
